#!/bin/bash
#set +H # jos tämä puuttuisi niin kertoman merkki: ! aiheuttaisi  virheen # 157 182 217


function laske () {
# mikäli kahden punctin välisessä palasessa on alphoja niin korvaa punctin välissä oleva sen arvolla
# lopuksi on pelkkiä arvoja ja saatuasi näin uuden palasen jossa on pelkkiä arvoja niin laske_palan_arvo 
apu=$(echo $1 | sed 's/e/'$(echo "e(1)" | bc -l)'/g') #  grep -Po '(?<=\+)\+|-|\*|\/|\^|\%') tr -d
luku=$(echo $apu | tr -d '![[:alpha:]]' | sed 's/^+//g;s/++/+/g;s/--/+/g;s/-+/-/g;s,\/+,\/,g;s/\*+/\*/g;s/\^+/\^/g') # laskumerkit bc:n sääntöjen mukaisiksi
case $(echo $apu | tr -d '[0-9].+-') in 
 sin) echo "s($luku)" | bc -l;;
 cos) echo "c($luku)" | bc -l;;
 tan) echo $(echo "s($luku)/c($luku)") | bc -l;;
 sqrt) echo "sqrt($luku)" | bc -l;;
 \!)   echo $(seq -s* $luku | bc | tr -d '\\' | tr -d "\n");; 
 *)  [[ $(echo $luku | grep '\^.*\.') ]] && echo $(echo "e($(echo $luku | awk -F^ '{print $2}')*l($(echo $luku | awk -F^ '{print $1}')))" | bc -l) || echo "$(echo $luku)" | bc -l;;           
esac
}

# kokeita, niitä on paljon ja ne muuttuvat kokoajan
laske +2--2
laske 99!-!99
laske !99
laske 2^2               
laske 2.000001^2
laske 2^2.000001 
laske 2*2.5
laske 2.5*2.5
laske sin1
laske s\(1\)



